import { ElMessage, ElMessageBox, ElLoading } from "element-plus";

// pinia
import { useUserStore } from "@/stores/index.js";

import config from "@/api/config.js";
import router from "@/router";

//	工具库
export const util = {
  // 获取本地图片
  getImageUrl(url) {
    return new URL(`../assets/img/${url}`, import.meta.url).href;
  },

  // 获取网络图片
  getHttpImageUrl(url) {
    if (url.indexOf("http") > -1 || url == "/static/avatar.png") return url;
    return config.host + url;
  },

  // 下载
  async downloadFile(blob, fileName) {
    // const arr = resource.split('/')
    // const length = arr.length;
    // if (!length) return;
    // const fileName = arr[length - 1];
    let downloadElement = document.createElement("a");
    let href = window.URL.createObjectURL(blob);
    downloadElement.href = href;
    downloadElement.download = fileName;
    document.body.appendChild(downloadElement);
    downloadElement.click();
    document.body.removeChild(downloadElement);
    window.URL.revokeObjectURL(href);
  },

  // 使用 Clipboard API 复制文本到剪贴板
  copy(text) {
    // 回退方案：适用于不支持 Clipboard API 的浏览器
    function fallbackCopyTextToClipboard(text) {
      const textArea = document.createElement("textarea");
      textArea.value = text;

      // 隐藏textarea元素
      textArea.style.position = "fixed";
      textArea.style.top = "0";
      textArea.style.left = "0";
      document.body.appendChild(textArea);
      textArea.focus();
      textArea.select();

      try {
        const successful = document.execCommand("copy");
        const msg = successful ? "成功复制文本!" : "复制文本失败!";
        console.log(msg);
      } catch (err) {
        console.error("Oops, unable to copy", err);
      }

      document.body.removeChild(textArea);
    }

    if (navigator.clipboard && window.isSecureContext) {
      navigator.clipboard
        .writeText(text)
        .then(function () {
          console.log("文本已成功复制到剪贴板");
        })
        .catch(function (err) {
          console.error("无法复制文本: ", err);
        });
    } else {
      // 对于不支持 Clipboard API 或者非安全上下文的情况
      fallbackCopyTextToClipboard(text);
    }
  },

  // 加载效果
  showLoading() {
    ElLoading.service({
      lock: true,
      text: "加载中...",
      background: "rgba(0,0,0,0.4)",
    });
  },

  // 关闭加载效果
  hideLoading() {
    ElLoading.service({}).close();
  },

  // 弹窗
  alert(obj) {
    //	这个地方说白了就是 如果只是想提示一句话一个文本的话 就只是弹个小tips
    if (typeof obj == "string" || typeof obj == "number") {
      ElMessage({
        type: "success",
        message: obj,
        duration: 2000,
        showClose: false,
      });
      return;
    }

    //	标题
    obj.title = obj.title ? obj.title : "系统提示";

    //	提示内容
    obj.value = obj.value ? obj.value : "提示信息";

    //	跳转页面
    obj.url = obj.url ? obj.url : "";

    //	确定文本
    obj.confirmText = obj.confirmText ? obj.confirmText : "确定";

    //	取消按钮
    obj.cancel = obj.cancel === false ? false : true;

    //	是否关闭当前页面
    obj.close = obj.close ? obj.close : false;

    //	取消文本
    obj.cancelText = obj.cancelText ? obj.cancelText : "取消";

    //
    ElMessageBox({
      title: obj.title,
      message: obj.value,
      confirmButtonText: obj.confirmText,
      cancelButtonText: obj.cancelText,
      // type:"success",
      showCancelButton: obj.cancel,
      confirmButtonClass: "primary",
      showClose: false,
      closeOnClickModal: false,
      center: false,
    })
      .then((rs) => {
        var res = {};
        res.confirm = true;
        obj.success ? obj.success(res) : function () {};
      })
      .catch((res) => {
        var res = {};
        res.cancel = true;
        obj.success ? obj.success(res) : function () {};
      });
  },

  // 跳转
  to(url, param) {
    if (!url) {
      util.alert("暂无此页面", "info");
      return;
    }
    param = param ? param : {};

    // window.open(util.WEB_URL + url);
    // return

    router.push({
      path: url,
      query: param,
    });
  },

  // 去登录
  GoLogin() {
    // 先默认登录
    // return true;
    const { userId, token } = useUserStore();

    try {
      if (!token) {
        throw Error("1");
      }
      return true;
    } catch (e) {
      // this.alert('请先登录')
      util.to("/login");
      return false;
    }
  },

  // 处理 content // 后台人员要求 前端处理
  disposeContent(content) {
    if (!content) {
      console.log("缺少content");
      return "";
    }
    content = content.replace(/\/dev-api/g, config.host);
    content = content.replace(/\/prod-api/g, config.host);
    // content = content.replace(/<img /g,'<img style="width: 100%;"')
    return content;
  },

  // 倒计时
  countDownd(endtime) {
    if (!endtime) {
      return;
    }

    var timestamp = Date.parse(new Date());

    timestamp = timestamp / 1000;

    var time = endtime - timestamp; //距离结束的毫秒数

    // 获取天、时、分、秒
    let day = util.timeFormin(parseInt(time / (60 * 60 * 24)));
    let hou = util.timeFormin(parseInt((time % (60 * 60 * 24)) / 3600));
    let min = util.timeFormin(parseInt(((time % (60 * 60 * 24)) % 3600) / 60));
    let sec = util.timeFormin(parseInt(((time % (60 * 60 * 24)) % 3600) % 60));

    var str = "";

    if (day) {
      str += day + "天";
    }

    if (hou || hou == 0) {
      if (hou > 9) {
        str += hou + ":";
      } else {
        str += "0" + hou + ":";
      }
    } else {
      str += "00:";
    }

    if (min || min == 0) {
      if (min > 9) {
        str += min + ":";
      } else {
        str += "0" + min + ":";
      }
    } else {
      str += "00:";
    }

    if (sec) {
      if (sec > 9) {
        str += sec;
      } else {
        str += "0" + sec;
      }
    } else {
      str += "00";
    }

    return str;
  },

  // 获取对应的时间格式
  getTime(name = "formattedDateTime", timestamp = 0) {
    let currentTime = timestamp ? new Date(timestamp) : new Date(); // 获取当前时间

    let year = currentTime.getFullYear(); // 获取年份
    let month = currentTime.getMonth() + 1; // 获取月份（注意月份是从0开始计数的，所以需要加1）
    let day = currentTime.getDate(); // 获取日期
    let hours = currentTime.getHours(); // 获取小时
    let minutes = currentTime.getMinutes(); // 获取分钟
    let seconds = currentTime.getSeconds(); // 获取秒数
    let milliseconds = currentTime.getMilliseconds(); // 获取毫秒数

    // 格式化时间为 YYYY-MM-DD
    let formattedDate = `${year}-${month.toString().padStart(2, "0")}-${day
      .toString()
      .padStart(2, "0")}`;
    // 格式化时间为 HH:MM:SS
    let formattedTime = `${hours.toString().padStart(2, "0")}:${minutes
      .toString()
      .padStart(2, "0")}:${seconds.toString().padStart(2, "0")}`;
    // 格式化时间为 YYYY-MM-DD HH:MM:SS
    let formattedDateTime = `${formattedDate} ${formattedTime}`;
    // 格式化时间为 HH:MM
    let formattedTime2 = `${hours.toString().padStart(2, "0")}:${minutes
      .toString()
      .padStart(2, "0")}`;
    // 格式化时间为 MM/DD/YYYY
    let formattedDateUS = `${month.toString().padStart(2, "0")}/${day
      .toString()
      .padStart(2, "0")}/${year}`;
    // 格式化时间为 HH:MM AM/PM
    let formattedTime12Hour = `${hours % 12 || 12}:${minutes
      .toString()
      .padStart(2, "0")} ${hours < 12 ? "AM" : "PM"}`;

    const data = {
      year,
      month,
      day,
      hours,
      minutes,
      seconds,
      milliseconds,

      formattedDate,
      formattedTime,
      formattedTime2,
      formattedDateTime,
      formattedDateUS,
      formattedTime12Hour,
    };
    return data[name];
  },
};

export default util;
